// 配置路由的地方

/**
 * 引入Vue、VueRouter
 */
import Vue from "vue";
import VueRouter from "vue-router";

// 先把VueRouter原型对象的push,先保存一份
const originalPush = VueRouter.prototype.push
const orginReplace = VueRouter.prototype.replace
// 第一个参数：告诉原来的push方法，你往那里跳转（传递哪些参数）
// 第二个参数：成功的回调
// 第三个参数：失败的回调
VueRouter.prototype.push = function push(location, onResolve, onReject) {
  if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject)
  //call||apply区别：相同点，都可以调用一次，都可以篡改函数的上下文一次
  // 不同点：call与apply传递参数，call传递参数用逗号隔开，apply方法执行，传递数组
  return originalPush.call(this, location).catch(err => err)
}
VueRouter.prototype.replace = function(location, onResolve, onReject) {
  if (onResolve || onReject) return orginReplace.call(this, location, onResolve, onReject)
  return orginReplace.call(this, location).catch(err => err)
}



// 使用插件
Vue.use(VueRouter);

// 引入路由组件
import Home from "@/pages/Home";
import Search from "@/pages/Search";
import Login from "@/pages/Login";
import Register from "@/pages/Register";

// 配置路由 需要对外暴露一个VueRouter的一个实例
export default new VueRouter({
  // 配置路由
  routes: [
    {
      path: "/home",
      component: Home,
      meta: { show: true },
    },
    {
      path: "/search/:keyword?",
      name: "search",
      component: Search,
      meta: { show: true },
      // 路由组件可不可以传递props数据,注意只有params
      // props:true
      // props:{a:1,b:2}
      // 函数写法：可以params参数、query参数，通过props传递给路由组件
      props:($route) => {
        return {
            keyword:$route.params.keyword,
            k:$route.query.k
        };
      },
    },
    {
      path: "/login",
      component: Login,
      meta: { show: false },
    },
    {
      path: "/register",
      component: Register,
      meta: { show: false },
    },
    // 重定向，在项目跑起来的时候，访问/，立马让他定向到首页
    {
      path: "/",
      redirect: "/home",
    },
  ],
});
